import axios from './axios'
import obj from './api.js'
import { getCookie } from '@/utils/cookie'
import { Toast } from 'vant'
var { user, types, banner, video, cart, address} = obj
// 要轮播图
export function getBanner() {
    // return axios.get('/banner')
    return axios.get(banner)
}
// 只要分类
export function getTypes() {
    // return axios.get('/types').then(data => {
    return axios.get(types).then(data => {
        // console.log(666, data); // 分类带商品的所有数据
        // 将data中的商品删掉 - 只保留分类数据
        var types = data.map(type => {
            delete type.products
            return type
        })
        // console.log(888, types);
        return new Promise(function (resolve, reject) {
            resolve(types)
        })
    })
}

// 要分类带商品的
export function getTP() {
    // return axios.get('/types')
    return axios.get(types)
}
//只要商品
export function getPro(typename) {
    return axios.get(types).then(data => {
        if (typename === '全部') {
            var arr = []
            data.forEach(type => {
                arr = arr.concat(type.products)
            })
            // return new Promise(resolve => resolve(arr))
        }
        else {
            var arr = data.find(type => type.name === typename).products

        }
        return new Promise(resolve => resolve(arr))
        // var arr = []
        // data.forEach(type => {
        //     arr = arr.concat(type.products)
        // })
        // return new Promise(resolve => resolve(arr))
    })
}
export function getVideos() {
    return axios.get(video)
}

export function register(params) { 
    return axios.get('/user').then(data => { 
        // data是查询出来的所有的账号组成的数组 
        // 从data中查询是否有当前输入的账号 - params.username 
        var index = data.findIndex(item => item.username === params.username) 
        if(index < 0) { 
            // 没有查到 - 当前账号没有被注册过 - 可以注册 - 发送增的请求存储数据 
            return axios.post(user, params).then(data => { 
                return new Promise(resolve => resolve({ 
                    code: 0, 
                    msg: '注册成功' 
                })) 
            })
         } else { 
            return new Promise(resolve => resolve({ 
                code: 1,
                 msg: '账号被占用' 
                })) 
            } 
        }) 
    }

export function login(params) { 
    return axios.get(user).then(users => { 
        var index = users.findIndex(
            item => item.username === params.username && item.password === params.password
            ) 
            if(index < 0) { 
                var responseObj = { 
                    code: 0, 
                    msg: '账号或密码错误',
                } 
            } 
            else { 
                var responseObj = { 
                    code: 1, 
                    msg: '登录成功', 
                    data: {
                        username: users[index].username,
                        nickname: users[index].nickname,
                    }
                } 
            }
            return new Promise(resolve => resolve(responseObj)) 
        }) 
    }

// 定义一个加入购物车的函数 
export function addCart(product) { 
    // 获取所有购物车数据 
    return axios.get(cart).then(carts => { 
        // console.log(carts); 
        // 在carts中查找是否有当前商品id和当前用户名 
        var cartPro = carts.find(item => item.pid === product.pid && item.username === 
            product.username) 
            if(cartPro) { 
                // 将查出来的数据中的number+1 
                cartPro.number++ 
                // 发起一个put修改请求 - 修改数量 
                return axios.put(cart + '/' + cartPro.id, cartPro).then(data => { 
                    return new Promise(resolve => resolve({ 
                        code: 1, 
                        msg: '添加成功' 
                    })) 
                }) 
            } else { 
                // 发起一个post请求 - 添加数据 
                return axios.post(cart, product).then(data => { 
                    return new Promise(resolve => resolve({ 
                        code: 1, 
                        msg: '添加成功' 
                    })) 
                }) 
            } 
        }) 
    }

// 获取购物车数据
export function getCartsPro(){
        return axios.get(cart).then(data => {
            // 这里的data就是所有的数据 
            // 过滤 - 需要用到当前登录的用户名 - cookie中获取
            // 获取当前登录的用户名
            var username = getCookie('username')
            // 过滤
            data = data.filter(item => item.username === username)
            // 返回给调用的地方
            return new Promise(resolve => resolve(data))
        })
}

// 封装数量修改的函数
export function editCart(params){// params就是将原本数据修改后的对象
    return axios.put(cart + '/' +params.id ,params).then(data =>{
        return new Promise(resolve => resolve({
           code: 1, 
           msg: '数量修改成功'
        }))
    })
}

// 封装删除数据的请求的函数
export function delCart(id) { 
    return axios.delete(cart + '/' + id).then(data => { 
        return new Promise(resolve => resolve({ 
            code: 1, 
            msg: '购物车商品删除成功！' 
        })) 
    }) 
}

//保存地址
export function saveAddr(params) {
    var username = getCookie('username') 
    // 如何判断是添加还是修改 
    // console.log(params); 
    // 添加的时候，数据中没有id，修改的时候数据中有id - 拿id判断是修改还是添加 
    if(params.id) { 
        // 修改 
        // 要先判断将要修改的这个新地址是默认的还是非默认的 
        if(params.isDefault) { 
            // 要修改的是默认地址 
            // 先将原本的默认改成非默认 
            // 获取所有地址 
            return axios.get(address).then(data => { 
                // 从所有地址中过滤出当前用户的地址 
                data = data.filter(item => item.username === username) 
                // 从当前用户的地址中找到默认地址 
                var defaultAddr = data.find(item => item.isDefault) 
                // 判断是否找到 
                if(defaultAddr) { 
                    // 找到了 
                    // 先将原本的默认地址改成非默认 
                    defaultAddr.isDefault = false
                    return axios.put(address + '/' + defaultAddr.id, defaultAddr).then(data => { 
                        // 改完后，再修改当前默认地址
                        return axios.put(address + '/' + params.id, params).then(data => { 
                            return new Promise(resolve => resolve({ 
                                code: 1, 
                                msg: '地址修改成功' 
                            })) 
                        }) 
                    }) 
                } else { 
                    // 直接改 
                    return axios.put(address + '/' + params.id, params).then(data => { 
                        return new Promise(resolve => resolve({ 
                            code: 1, 
                            msg: '地址修改成功' 
                        })) 
                    }) 
                } 
            }) 
        } else { 
            // 要修改的不是默认地址 
            // 直接修改 
            return axios.put(address + '/' + params.id, params).then(data => { 
                return new Promise(resolve => resolve({ 
                    code: 1, 
                    msg: '地址修改成功' 
                })) 
            }) 
        } 
    } else { 
        // 添加 
        // 判断当前要添加的地址是否是默认地址 
        if(params.isDefault) { 
            // 添加的是默认地址 
            // 先将原本的默认地址改成非默认地址 
            // 获取当前用户的默认地址 
            return axios.get(address).then(data => { 
                // 过滤出当前用户的所有地址 
                data = data.filter(item => item.username === username) 
                // 从当前用户的所有地址中找出默认地址 
                var defaultAddr = data.find(item => item.isDefault) 
                // 判断是否找到了默认地址 
                if(defaultAddr) { 
                    // 找到了默认地址 
                    // 将这个默认地址先改成非默认地址 
                    defaultAddr.isDefault = false 
                    return axios.put(address + '/' + defaultAddr.id, defaultAddr).then(data => { 
                        // 改完后，再添加新的默认地址 
                        return axios.post(address, params).then(data => { 
                            return new Promise(resolve => resolve({
                                code: 1, 
                                msg: '地址保存成功' 
                            })) 
                        }) 
                    }) 
                } else { 
                    // 没有找到默认地址 
                    return axios.post(address, params).then(data => { 
                        return new Promise(resolve => resolve({ 
                            code: 1, 
                            msg: '地址保存成功' 
                        })) 
                    }) 
                } 
            }) 
        } else { 
            // 添加的是非默认地址 
            return axios.post(address, params).then(data => { 
                return new Promise(resolve => resolve({ 
                    code: 1, 
                    msg: '地址保存成功' 
                })) 
            }) 
        } 
    }
}

//获取地址
export function getAddrs(){
    return axios.get(address).then(data => {
        //data是address中的所有数据
        //从所有数据中筛选出当前用户的数据
        var username = getCookie('username')
        data = data.filter(item => item.username === username)
        return new Promise(resolve => resolve({
            code: 1,
            msg: '地址获取成功',
            data: data
        }))
    })
}

//删除地址
export function delAddr(id){
    return axios.delete(address + '/' + id).then(data => {
        return new Promise(resolve => resolve({
            code: 1,
            msg: '地址删除成功!'
        }))
    })
}

// 获取默认地址 
export function getDefaultAddr() {
    // 获取所有地址 
    return axios.get(address).then(data => { 
        // 获取到当前用户的地址 
        var username = getCookie('username') 
        data = data.filter(item => item.username === username) 
        // 判断当前用户是否有地址 
        if(data.length) { 
            // 从中找到默认地址 
            var defaultAddr = data.find(item => item.isDefault) 
            // 判断是否找到 
            if(defaultAddr) { 
                return new Promise(resolve => resolve({ 
                    code: 1, 
                    msg: '默认地址获取成功', 
                    data: defaultAddr 
                })) 
            } else { 
                // 没有默认地址 
                return new Promise(resolve => resolve({ 
                    code: 1, 
                    msg: '默认地址获取成功', 
                    data: data[0] 
                })) 
            } 
        } else { 
            return new Promise(resolve => resolve({ 
                code: 2, 
                msg: '用户暂未添加地址', 
                data: null 
            })) 
        } 
    }) 
}